/*
 * 数据表格页面通用脚本
 */
layui.use(['table', 'treeTable', 'form', 'jquery', 'common'], () => {
    var $ = layui.jquery, form = layui.form, common = layui.common;
    
    if (TABLE_TYPE == "TREE"){
        TABLE = layui.treeTable; // 数形表格
    } else {
        TABLE = layui.table; // 数据表格
    }
    
    // 移动模式下重设弹窗都设为全屏
    if (common.isModile()) { POPUP_AREA = ['100%', '100%'];}
    
    
    // ------------------------------- 操作方法定义开始 --------------------------------------------------------------//
    
    /*
     * 数据表格操作方法
     */
    window.dataTable = {
        /*
         * 重新渲染整个数据表格，并带上查询面板中的查询参数
         */
    	search: (obj) => {
            // 从查询表单中获取参数
            OPTIONS.where = form.val("query-form");
            // OPTIONS中的默认排序参数带入到where参数中
            if (OPTIONS.initSort) {
                OPTIONS.where.sortField = OPTIONS.initSort.field;
                OPTIONS.where.sortType = OPTIONS.initSort.type;
            }
            // 渲染表格
            TABLE.render(OPTIONS);
        }
        /*
         * 重新加载数据表格数据
         */
        , refresh: (obj) => {
            // 重新加载数据表格
        	TABLE.reloadData("data-table", null, true);
        }
        /*
         * 新建记录
         */
        , add: (obj) => {
            var url = MODULE_PATH + "add";
            window.dataTable.addOrEdit("<i class='layui-icon layui-icon-add-1'></i>&nbsp;&nbsp;新增", url, "post", "add");
        }
        /*
         * 新建子项记录
         */
        , addChild: (obj) => {
        	var url = MODULE_PATH + "add?parentId=" + obj.data['id'];
            window.dataTable.addOrEdit("<i class='layui-icon layui-icon-add-1'></i>&nbsp;&nbsp;新增", url, "post", "add");
        }
        /*
         * 编辑记录
         */
        , edit: (obj) => {
        	var url = MODULE_PATH + "edit?id=" + obj.data['id'];
        	window.dataTable.addOrEdit("<i class='layui-icon layui-icon-edit'></i>&nbsp;&nbsp;编辑", url, "put", "edit");
        }
        /*
         * 新增或编辑记录总方法
         */
        , addOrEdit: (title, url, method, action) => {
            layer.open({
                type : 2,
                title : title,
                content : url,
                maxmin : false,
                area : POPUP_AREA,
                closeBtn : 1,
                shadeClose : false,
                anim : 1,
                moveOut : false,
                resize : false,
                btn : [ '保存', '取消' ],
                yes : (index, layero) => {
                    var iframeWindow = window['layui-layer-iframe' + index],
                    submitID = 'data-save', // 此ID必须和弹出iframe窗口中提交按钮的ID和Filter值一致
                    submit = layero.find('iframe').contents().find("#" + submitID);
    
                    // 监听提交
                    iframeWindow.layui.form.on('submit('+ submitID + ')', function(data) {
                        $.ajax({ // 用Ajax替换弹窗中的提交
                            url : MODULE_PATH + action,
                            type : method,
                            data : data.field, // 获取提交的数据
                            beforeSend : () => {layer.load();}, // 防止重复操作
                            complete : () => {layer.closeAll('loading');}, //解除防重复操作
                            success : (result) => {
                                if(result.code == 200){
                                    // 提交 Ajax 成功后，静态更新表格中的数据
                                    window.dataTable.refresh(); // 数据表格刷新
                                    layer.close(index); //关闭弹层
                                } else {
                                    if(result.description){
                                        // Ajax调用成功，但后台返回失败信息
                                        layer.alert(result.description, {icon: 5});
                                    } else {
                                        layer.alert("操作失败！", {icon: 2});
                                    }
                                }
                            },
                            error : function (e) { // Ajax调用失败
                                layer.alert("操作失败：" + e.responseText, {icon: 2});
                            }
                        });
                        return false; // 一定要返回False来阻止弹出窗口中提交按钮的再次提交
                    });
    
                    submit.trigger('click'); // 这里触发弹出窗口的提交按钮
                }
            });
        }
        /*
         * 多记录移除
         */
        , batchRemove: (obj) => {
            var checkedIds = common.checkField(obj, 'id');
            
            if (checkedIds === "") {
                layer.msg("未选中任何记录", {
                    icon: 3,
                    time: 1000
                });
                return false;
            }
        	window.dataTable.removeByIds(checkedIds);
        }
        /*
         * 单记录移除
         */
        , remove: (obj) => {
        	window.dataTable.removeByIds(obj.data['id']);
        }
        /*
         * 通过ID表移除记录
         */
        , removeByIds: (ids) =>{
            layer.confirm('确定要删除选择的记录？', {
                icon: 3,
                title: '提示'
            }, (index) => {
                layer.close(index);
                $.ajax({
                    url: MODULE_PATH + "delete",
                    dataType: 'json',
                    type: 'delete',
                    data: {"ids": ids},
                    beforeSend: () => {layer.load();}, // 防止重复操作
                    complete: () => {layer.closeAll('loading');}, //解除防重复操作
                    success: (result) => {
                        if (result.code == 200) {
                            // 提交 Ajax 成功后，静态更新表格中的数据
                            window.dataTable.refresh(); // 数据表格刷新
                        } else {
                            if(result.description){
                                // Ajax调用成功，但后台返回失败信息
                                layer.alert(result.description, {icon: 5});
                            } else {
                                layer.alert("操作失败！", {icon: 2});
                            }
                        }
                    }
                })
            });
        }
        /*
         * 查看记录详情
         */
        , detail: (obj) => {
            layer.open({
                type : 2,
                title : "<i class='layui-icon layui-icon-survey'></i>&nbsp;&nbsp;查看",
                content : MODULE_PATH + "detail?id=" + obj.data['id'],
                maxmin : false,
                area : POPUP_AREA,
                closeBtn : 1,
                shadeClose : false,
                anim : 1,
                moveOut : false,
                resize : false,
                btn : [ '关闭' ],
                yes : (index, layero) => {
                    layer.close(index); // 关闭弹层
                }
            });
        }
        /*
         * 导入Excel数据
         */
        , importExcel: () => {
            
        }
        /*
         * 导出成Excel
         */
        , exportExcel: () => {
            
        }
        /*
         * 清空所有记录
         */
        , clearAll: () => {
            layer.confirm("确认清空所有记录吗？", {
                icon: 3,
                title: '确认'
            }, (index) => {
                layer.close(index);
                $.ajax({
                    url: MODULE_PATH + "clear",
                    method: "post",
                    data: form.val("query-form"),
                    beforeSend : () => {layer.load();}, // 防止重复操作
                    complete : () => {layer.closeAll('loading');}, //解除防重复操作
                    success: (result) => {
                        if (result.code == 200) {
                            layer.alert("操作成功！", {icon: 1});
                            window.dataTable.search();
                        } else {
                            if(result.description){
                                // Ajax调用成功，但后台返回失败信息
                                layer.alert(result.description, {icon: 5});
                            } else {
                                layer.alert("操作失败！", {icon: 2});
                            }
                        }
                    }
                });
            });
        }
        , handleEvent: (event, obj) => {}
    };
    
    /*
     * 树型表格
     */
    if (TABLE_TYPE == "TREE") {
        /*
         * 树型表格继承自数据表格
         */
        window.treeTable = window.dataTable;
    
        /*
         * 定义展开树型表格方法
         */
        window.dataTable.expandAll = () => {
            TABLE.expandAll('data-table', true);
        };
        
        /*
         * 定义收缩树型表格方法
         */
        window.dataTable.foldAll = () => {
            TABLE.expandAll('data-table', false);
        };
        
        /*
         * 重写数据表格的Done方法
         */
        OPTIONS.done = (res, curr, count) => {
            // 展开全部
            window.treeTable.expandAll();
        };
    }
    // ------------------------------- 操作方法定义结束 --------------------------------------------------------------//
    
    
    // ------------------------------- 表格事件监听开始 --------------------------------------------------------------//
    // 监听行双击事件
    TABLE.on('rowDouble(data-table)', (obj) => {
        if (window.dataTable.handleEvent("doubleClick", obj) == true){
            return;
        }
        window.dataTable.detail(obj);
    });
    
    // 表格上端工具条按钮
    TABLE.on('toolbar(data-table)', (obj) => {
        if (window.dataTable.handleEvent(obj.event, obj) == true){
            return;
        }
        if (obj.event === 'add') {
            window.dataTable.add(obj);
        }
        if (obj.event === 'batchRemove') {
            window.dataTable.batchRemove(obj);
        }
        if (obj.event === 'clearAll') {
            window.dataTable.clearAll(obj);
        }
        if (obj.event === 'expandAll') {
            window.treeTable.expandAll(obj);
        }
        if (obj.event === 'foldAll') {
            window.treeTable.foldAll(obj);
        }
        if (obj.event === 'toggle') {
            window.queryForm.toggle();
        }
    });
    
    // 监听表格中每条记录后面的操作
    TABLE.on('tool(data-table)', (obj) => {
        if (window.dataTable.handleEvent(obj.event, obj) == true){
            return;
        }
        if (obj.event === 'addChild') {
            window.dataTable.addChild(obj);
        }
        if (obj.event === 'remove') { //
            window.dataTable.remove(obj);
        }
        if (obj.event === 'edit') {
            window.dataTable.edit(obj)
        }
    });
    
    // 监听表格标题头部排序切换小箭头
    TABLE.on('sort(data-table)', (obj) => {
        // 更新OPTIONS的排序字段
        OPTIONS.initSort = {"field": obj.field, "type": obj.type};
        // 查询数据表格
        window.dataTable.search(obj);
    });
    
    // ------------------------------- 表格事件监听结束 --------------------------------------------------------------//

});
